{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction to computational study of lithium ion battery\n",
    "*Copyright (c) 2022 Institute for Quantum Computing, Baidu Inc. All Rights Reserved.*\n",
    "\n",
    "Lithium ion battery is an efficient and long-lasting battery, it has been widely used in various consumer electronics, industrial devices and automotive power systems. The development of lithium ion battery has promoted the popularization of electric vehicles and provided strong support for storage of renewable energy. Due to the advantages of lithium batteries, such as being lightweight, having high energy density, and being environmentally friendly, they have a wide range of applications and a good industry development prospect. Currently, the industry of lithium ion battery is under rapid development and is continuously innovating and promoting new technologies.\n",
    "\n",
    "The energy of lithium ion battery is generated by the electron-chemical interaction between its cathode and anode materials.\n",
    "$$\n",
    "LiC_6+CoO_2\\stackrel{Discharge}{\\underset{\\text{Charge}}{\\rightleftarrows}}6C+LiCoO_2.\n",
    "$$\n",
    "\n",
    "According to the thermodynamics, this energy equals the difference of free energy \\[1\\] between materials in cathode and anode, which can be approximated by their ground state energy difference\\[2\\].\n",
    "$$\n",
    "\\Delta G=G_{\\text{LiCoO}_2}+6G_{\\text{C}}-G_{\\text{CoO}_2}-G_{\\text{LiC}_6}.\n",
    "$$\n",
    "\n",
    "Since the energy emitted during the chemical reaction is closely related to the molecules/materials occur in above formula, we have to obtain the accurate ground state energy of these molecules/materials once we want to estimate the total energy of the lithium ion battery. Meanwhile, the transport of lithium ion between the cathode and anode involves ion adsorption, which can be affected by the polarizability of related molecules."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Calculate ground state properties of molecule by quantum computational chemistry\n",
    "### Build molecular Hamiltonian\n",
    "The Hamiltonian of molecule is determined by its geometry and composition. Though the underlying procedure is a little complicated, users can easily achieve it by using `paddle_quantum`'s `qchem` module."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from paddle_quantum.qchem import Molecule, PySCFDriver\n",
    "\n",
    "mol = Molecule(\n",
    "    geometry = [(\"H\", [0.0, 0.0, 0.0]), (\"H\", [0.0, 0.0, 0.7])],\n",
    "    driver = PySCFDriver()\n",
    ")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we have built a hydrogen molecule model. In the code above, the `driver` is used to specify the classical quantum chemistry tool used in calculation of molecular integrals."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "converged SCF energy = -1.11734903499028\n",
      "-0.04207897647782183 I\n",
      "0.17771287465139923 Z0\n",
      "0.17771287465139923 Z1\n",
      "-0.24274280513140506 Z2\n",
      "-0.24274280513140506 Z3\n",
      "0.17059738328801052 Z0, Z1\n",
      "0.12293305056183806 Z0, Z2\n",
      "0.16768319457718972 Z0, Z3\n",
      "0.16768319457718972 Z1, Z2\n",
      "0.12293305056183806 Z1, Z3\n",
      "0.1762764080431961 Z2, Z3\n",
      "-0.044750144015351656 X0, X1, Y2, Y3\n",
      "0.044750144015351656 X0, Y1, Y2, X3\n",
      "0.044750144015351656 Y0, X1, X2, Y3\n",
      "-0.044750144015351656 Y0, Y1, X2, X3\n"
     ]
    }
   ],
   "source": [
    "h = mol.get_molecular_hamiltonian()\n",
    "print(h)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "At this step, we have built a Hamiltonian for hydrogen molecule under `STO-3G` basis."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Construct quantum circuit used in variational quantum eigensolver (VQE)\n",
    "Variational quantum algorithm (VQE) performs hybrid classical-quantum computation by optimizing parameters in quantum circuit on a classical optimizer. Compared to its classical counterpart, VQE can efficiently solve optimization problem in high dimensional space in some situations. Let's now construct a quantum circuit for our VQE task from \\[3\\]."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "converged SCF energy = -1.11734903499028\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhQAAADnCAYAAABG4897AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAvx0lEQVR4nO3de1BUZ54+8AdoG6S5ExUz4oU1zioSFS9bCrtljVnvETWjuzKZjWkTRXdqTKyBJCNT7JZT0THjrkxFsFQsV11xdOJdSaLChIzJKt4qKjMajbI42qAI3YLcpL+/P/Kj15bLOc3pKzyfqq6Ec+n37fe8D+fr6UO3n4gIiIiIiDTw93QHiIiIyPexoCAiIiLNWFAQERGRZiwoiIiISDMWFERERKQZCwoiIiLSjAUFERERacaCgoiIiDRjQUFERESasaAgIiIizVhQEBERkWYsKIiIiEgzFhRERESkGQsKIiIi0owFBREREWmmc3eDDQ0NaGpqcnezPkWv1yMoKMjT3SAPYk6UMSc9GzOizN0ZcWtB0dDQgCFDhsBkMrmzWZ8TExOD27dv85dlD8WcqMOc9FzMiDruzohbC4qmpiaYTCaUl5cjLCzMnU37DIvFgtjYWDQ1NfEXZQ/FnChjTno2ZkSZJzLi9rc8ACAsLIyTgEgBc0LUOWbEu/CmTCIiItKMBQURERFpxoKCiIiINGNBQURERJqxoCAiIiLNWFAQERGRZiwoiIiISDMWFERERKRZty4oioqKkJiYCKvV6pH2582bhx07dnikbSI1PJ0RgDkh78ecqCRuZDabBYCYzWbV+wwePFgCAwPFYDBISEiIJCUlyaVLl1Ttm5CQIEePHrX9nJ+fL8nJyRIaGipKL33EiBFiMBhsj969ewsAOXDggG2brKws8ff3t9vun//5n23rr169Kv369ZP6+nrVr7crY0Tdi6NzwJkZERH54x//KMnJyWIwGCQyMlLmzJnT4f4tLS3ywQcfSN++fcVgMMi0adPkzp07dtswJ+Rsnj6XZGRkyIgRIyQ0NFT69+8vRqNRHj58qOq55s6dKwCkqKjIbvmaNWskLi5OwsLCJDo6WqZOnWrXP0dz4omMePUViocPH+LOnTsoKipCbW0t7t+/j9DQUCxZskRx35MnT6K6uhozZ860LYuMjMSKFSuwceNGxf2vXbuG2tpa22PdunWIjo7GjBkz7Lb7+7//e7vt8vPzbevi4+MRFxeHPXv2qH/RRA5wdkaKi4sxZ84cpKWl4cGDBzCZTFi9enWHz7F+/Xrk5+ejuLgYJpMJAwcOxKuvvtrmX3LMCXmSs3MSEBCA3bt3o6qqCpcvX0Z5eTkWL16s+Fw7d+7EkydP2l23cOFCnD9/HmazGffu3cPUqVMxY8YMW5Z8ISdeXVCUlJRAr9cjMTERABASEoKkpCRUVFQo7nvgwAG88sor8Pf/v5c4bdo0LFq0CHFxcQ73JTc3F0uWLHH4S1amTp2KgwcPOtwekRrOzsj777+PpUuX4ic/+Ql69+4NvV6PCRMmdPgcmzdvRkZGBn74wx8iJCQE69evx/Xr1/GnP/3JodfBnJArOTsnH374IcaMGYNevXqhb9+++PnPf44vvvii0+e5e/cuMjMzsXXr1nbXDxs2DJGRkQAAEUFAQABMJhPMZrNtG2/PiVcXFOfOncPo0aMRGBgIq9WKM2fOICcnB6+//rrivhcvXsTIkSOd0o/CwkLcuHEDaWlpbdadP38effr0waBBg5Camorbt2/brU9ISEBJSYlT+uEsIoJr166hpKQEzc3Nnu4OaeDMjNTV1eHs2bMAgHHjxiE6OhoTJ07E6dOn293fbDajrKwM48aNsy2LiIjA0KFDcfnyZbttfTEndXV1+J//+R989913nu4KaeTqc8np06cxatSoDteLCIxGIzIzMzFw4MAOtzt+/DgiIiIQFBSEVatWYdWqVbYiA/DOnDzLqwuKkpISXL58GREREQgMDMSPfvQjfPDBB1i7dq3ivtXV1QgPD3dKP3JycjB9+nQMGTLEbvmPf/xjXLt2DZWVlfj666+h0+nwyiuvoLa21rZNWFgYHj165JR+OMOtW7cQHx+P0aNHIzk5Gf3790dBQYGnu0Vd5MyMVFdXw2q1Yvfu3di6dStMJhOMRiNeffXVdk+qFosFwPdFxLMiIiJs6wDfzElubi769OmDyZMnY9iwYZg8ebJX9Y8c48pzyb59+7Bt2zZkZ2d3uE1ubi5EBEuXLu20rVmzZqGmpgZVVVXYsGEDJk2aZLfe23LyPK8vKPLy8lBTU4OKigpMmDABly5dgp+fn+K+UVFRdpeKuurevXs4fPgwVqxY0WbdyJEjMWjQIPj5+eHFF19EXl4e7t+/j6+++sq2jcViQVRUlOZ+OIPVasU//uM/4vr163j69CmamppQVVWFuXPnory83NPdoy5wZkZCQ0MBAEaj0XY59+2338aQIUPw2Weftdm/9Wujn89ZTU2N3VdK+1pOiouLsXLlStTX16OxsREtLS34+uuv8dOf/tTTXaMuctW5ZO/evVi2bBmOHDliezvlebdu3cKaNWuwbds21f2NiorCypUrYTQace3aNdtyb8pJe3RqN3z2Xxxd5chzlJWVobKy0naQoqKikJmZiZSUFGzYsAGRkZE4e/YsNm7caLvBa/ny5UhJScH06dMxduxYuwPRVVu2bEFsbGybmzHb4+fnBz8/P4iIbdnVq1ftLgmr5Yzxft7Zs2fx17/+tc0Nc/7+/sjLy8OqVauc3iY5Tu2xd3ZGwsPDERcX1+aXbEe/dMPDwzFo0CCcP3/eNsfNZjNu3bqF0aNHd9hvb89JdnY2nj59aresqakJBQUFuH37NqKjo53eJjnGG84leXl5SE9Px7Fjx5CUlNRh+19++SWqqqowduxYu+UpKSlITU1Fbm5uu/tZrVY0Nzfj22+/RXx8PICu5cRZGXn2HwkdUvvnIACc9lDzZyz79+8Xg8EgLS0ttmXNzc0SEREheXl5IiLS2Ngow4cPFxGRCxcuyPz5823bnjp1SmJjY+32f/r0qdTX18tnn30mAKS+vl7q6+vttnlWc3OzvPjii7Ju3bp21+/du1cqKytFRKSiokIWL14sgwYNEovFYttm0qRJsm3bNsXX26r1T3344EMpJ67IyIYNG6R///7yzTffyNOnT2X79u1iMBjk9u3b7fZh7dq1EhcXJ9evX5fa2lpZtmyZJCQk2D0nc8KHqx6eOpdkZ2dLdHS0lJSUKLZfV1cn5eXldg8Asm/fPnn06JHdc96/f19ERCorK+Xtt9+WiIgIMZlMtm0cyYmzM6KG6isUznj7wGKxIDY2VtW2JSUlGDVqlN2dtTqdDrNmzcK+fftgNBqh1+sRHR2NiooKpKen211SmjJlCiIjI3HixAnMnj0bALBr1y68+eabtm169+4N4PsPLZk8eTLS0tJQVlZmu6fg8OHDqKqq6vBPi/77v/8bP/vZz1BXV4fIyEj8wz/8A06dOmW7dFxaWoqbN28iNTXVgVH6Xnl5ubqK0AHV1dV46aWX2tyIqdfrsX//fkyePNmp7VHXqM2JKzLy7rvvora2FtOmTUNtbS3i4+Nx/PhxDB48GADaZCQjIwNmsxnJycmoq6tDcnIyjhw5YtcnX8vJ5s2bkZWVhYaGBrvl/fv3R2lpqd1rI8/w9Llk5cqV0Ol0bX5nlpaWYuDAgXY5CQ4ORnBwcJt+9enTx+6Gy8LCQnz44Yd4/PgxwsLCMGHCBJw+fRr9+vWzPXdXcuKKjHRIVdnhJK74oI309HRZsGCBZGVltVlXWFgoY8aM6fAKhKvNmzdPtm/f7tA+rv4wko8//lh69eolAQEBAkACAwPlxz/+sVitVpe0R45z9hzw5oyIeF9O6urqJDExUYKCgmz/OtPr9fLpp586vS3qmp52LhFxPCee+GArny8oDh48KIMHD3boU/a8mTsmQUlJibz11lsCQPLz8z0aEmrL2XOgu2VExPU5qa+vlx07dsjChQsFgFy8eNEl7VDX8FyijJ+U2QXFxcXIzs52+AOnerJx48Zhw4YNAICZM2fyEm43x4w4LigoCG+88YbtQ4j+5m/+xsM9IldjTrTz2TPJ3bt3MXfuXAQEBGDOnDme7g6R12FGiJQxJ86j+qZMbzNgwAAcOnTI090g8lrMCJEy5sR5fPYKBREREXkPFhRERESkGQsKIiIi0owFBREREWnGgoKIiIg0Y0FBREREmrGgICIiIs1YUBAREZFmLCiIiIhIMxYUREREpBkLCiIiItKMBQURERFp5pEvB7NYLJ5o1idwbKgV50LHODYEcB50xhNj49aCQq/XIyYmBrGxse5s1ufExMRAr9d7uhvkIcyJOsxJz8WMqOPujLi1oAgKCsLt27fR1NTkzmZ9jl6vR1BQkKe7QR7CnKjDnPRczIg67s6I29/yCAoK4i8BIgXMCVHnmBHvw5syiYiISDMWFERERKQZCwoiIiLSjAUFERERacaCgoiIiDRjQUFERESasaAgIiIizVhQEBERkWYsKIiIiEgzt39SZkNDAz8uVUFXPy7VkbFt/eIYR79Ahh937B7MibKuzEVHx7UrOWFG3IMZUebuuegnIuKuxhoaGjBkyBCYTCZ3NemTYmJicPv2bYcmgrvGtit9I8cwJ+o4OheZke6DGVHH3XPRrVcompqaYDKZUF5ejrCwMHc27TMsFgtiY2PR1NTk0CRwx9h2tW/kGOZEWVfmIjPSfTAjyjwxF93+lgcAhIWFcRK4CMe2++CxdA2Oa/fBY+ldeFMmERERacaCgoiIiDRjQUFERESasaAgIiIizVhQEBERkWYsKIiIiEgzFhRERESkGQsKIiIi0owFBREREWnWrQuKoqIiJCYmwmq1eqT9efPmYceOHR5pm0gNT2cEYE7I+zEnKokbmc1mASBms1n1PoMHD5bAwEAxGAwSEhIiSUlJcunSJVX7JiQkyNGjR20/t7S0yAcffCB9+/YVg8Eg06ZNkzt37nS4f0ZGhowYMUJCQ0Olf//+YjQa5eHDh7b1JpNJFi1aJH369JHw8HCZOHGifPHFF7b1V69elX79+kl9fb3q19uVMdKyn7e1QY6PszMzojTnn7dmzRqJi4uTsLAwiY6OlqlTp7ZpW+k53ZUTZqT78PS5JD8/X5KTkyU0NFTUnEarqqrEaDRK//79JSQkRObMmSPl5eV22zg7J56Yi159heLhw4e4c+cOioqKUFtbi/v37yM0NBRLlixR3PfkyZOorq7GzJkzbcvWr1+P/Px8FBcXw2QyYeDAgXj11Vc7rDoDAgKwe/duVFVV4fLlyygvL8fixYtt61esWIF79+6htLQUVVVVeO211zBr1izU1NQAAOLj4xEXF4c9e/ZoGgeijjg7I0pz/nkLFy7E+fPnYTabce/ePUydOhUzZsywy5TSczIn5GrOzklkZCRWrFiBjRs3qmr/jTfeQGVlJUpLS3H//n0EBwe3Ofd0i5y4rXQRxyumEydOiF6vl4aGBtuyNWvWyA9+8APFfdPS0mTx4sV2ywYNGiQ5OTm2n6urq0Wv19tdVejM0aNHJTQ01Pbzyy+/LB9//LHt58ePHwsAOX/+vG1ZVlaWzJ49W9Xzi7j2CsWePXvEYDC0eeh0OgEg586dc0nfyDGOjLOzM/K85+d8ZxoaGuQ///M/BYA8evTIoed0R07U7qMlJ8yIe3j6XNKqqKhI8QpFbW2t+Pn5SUlJiW3Zt99+KwCkuLi4w/205oRXKJ5z7tw5jB49GoGBgbBarThz5gxycnLw+uuvK+578eJFjBw50vaz2WxGWVkZxo0bZ1sWERGBoUOH4vLly6r6c/r0aYwaNcr283vvvYcDBw7AZDKhubkZmzZtwrBhw+zaTUhIQElJiarnd7VFixahtrbW7lFQUIDg4GC8//77GD9+vEf7JyIoKirCxx9/jJMnT3r0/Upf4cyMtOf5Od+e48ePIyIiAkFBQVi1ahVWrVqFyMhIh56TOVHPbDZj586d2Lx5M8rKyjzaF1/h6px0RkTs/vvs/1+6dKnD/bw9J+1yW+kijldMs2bNEr1eL+Hh4aLT6USv18vvfvc7sVqtivu+9NJLsnXrVtvP//u//ysA5MaNG3bbTZo0SdasWaP4fL///e8lJCRELly4YFt2+/ZtmTZtmgCQgIAA6du3r3z11Vd2+33++efSq1cvxedv5c57KD799FMJDg6WX//61y7tmxoWi0XGjx8vgYGBEhwcLIGBgTJq1Ciprq52elvezpFxdmZGntfenO9MVVWV/Md//If84Q9/cPg53ZGTrs5fR3Li6n8Vnj59Wnr37i3BwcESHBwsAQEBsm7dOpe05c08eS55lporFCIiU6ZMkRkzZsjDhw+lpqZGFixYIH5+fh3OKWfkhFconlNSUoK8vDzU1NSgoqICEyZMwKVLl+Dn56e4b1RUFMxms+3nsLAwALBbBgA1NTW2dR3Zu3cvli1bhiNHjiAxMREAYLVaMWXKFAwYMACPHj1CQ0MDtmzZghkzZuDKlSu2fS0WC6KiolS/Znc5cOAAUlJSsHbtWqxevdrT3cG//du/4ZtvvkFjYyOePHmCxsZG/PnPf8Z7773n6a55NWdm5FntzXk1z7dy5UoYjUZcu3bNoedkTpQ1NjZi/vz5qK+vx5MnT/DkyRO0tLQgMzMT33zzjUf75u1clRO1du/ejaioKLz88suIj49HUlISQkJC8MILL7TZ1hdz0kqndkOLxaK5MUeeo6ysDJWVlbYBjYqKQmZmJlJSUrBhwwZERkbi7Nmz2LhxI/Lz8wEAy5cvR0pKCqZPn46xY8fa/VILDw/HoEGDcP78edvbHmazGbdu3cLo0aM77EdeXh7S09Nx7NgxJCUl2ZZXV1fju+++w6FDh2yXd1NSUhAXF4fPP/8cCQkJAICrV6/avc2ilqPj7cj2u3btwltvvYXc3FwYjUZHu+aUudBenxobG+2WNTU1Ye/evfjoo4+c3p43Uzu+zs5Iq47mvBpWqxXNzc349ttvER8fr/o53ZETR+etlpy4IiOFhYVtMgIAfn5+2L17NzIzM53eprfy5LmkK2JiYrB7927bz1euXME777yDyZMn223nipw4ay4q/cMbgPq3PAA47aHmEsz+/fvFYDBIS0uLbVlzc7NERERIXl6eiIg0NjbK8OHDRUTkwoULMn/+fNu2p06dktjYWLv9165dK3FxcXL9+nWpra2VZcuWSUJCgt02z8rOzpbo6Gi7m2meNXz4cFm6dKmYzWZpaWmRw4cPi16vl6KiIts2kyZNkm3btim+3latl6lcNbY5OTmi1+tl7969qvvkrL7x4dxj6YqMKM3552VnZ8v9+/dFRKSyslLefvttiYiIEJPJ5NBzujMnan7/dDUnzIh3ZUTENTl5+vSp1NfXy2effSYApL6+Xurr6zs8l/zlL3+RBw8eiNVqlatXr8rYsWNlyZIldts4OyfOnotqqL5CofWSD/B9pRQbG6tq25KSEowaNQr+/v/3roxOp8OsWbOwb98+GI1G6PV6REdHo6KiAunp6di2bZtt2ylTpiAyMhInTpzA7NmzAQAZGRkwm81ITk5GXV0dkpOTceTIEVsbaWlpKCsrQ0FBAQBg5cqV0Ol0barI0tJSDBw4EIcPH0Z6ejqGDh2KhoYGDBo0CJs2bbJtX1paips3byI1NdXhsSovL1dXEf5/asZ2/fr1yMrKwieffGIbk65wtG9q/PKXv8S2bdvs/gXWq1cv/OQnP0F2drZT2/J2anPiiowozfnnM1JYWIgPP/wQjx8/RlhYGCZMmIDTp0+jX79+tn2VntNdOVE7rs7IiSsy0tjYiKFDh7b5F6dOp8MXX3yh6cZBX+Ppc8muXbvw5ptv2rbp3bs3gO8/AGvy5MltcnLmzBn86le/QnV1Nfr27Quj0djmLTRX5cQVc7FDqsoOJ3HFTSLp6emyYMECycrKarOusLBQxowZ02HV6Grz5s2T7du3O7SPq27KXL16tRgMBjl16pRDz+uMvqnx+PFjGT9+vOj1eundu7cAkISEBN6U6QTenBER9+VEzT5ac+KumzJbM+Lv78+bMp2ku+XEEzdl+nxBcfDgQRk8eLBDn7LnzVxRUFy4cEEAiE6na/fv6xcuXOjSvqlltVqlqKhIPvroIwHQI4sJEeePc3fLiIhrCgpn5MQdv8Rrampk8+bNAkCuXLnisna8Gc8lyjxRUKh+y8NbFRcXIzs7G0FBQZ7uitdKTEy0+xtob+Xn54fJkycjMTER6enpdpcoqeuYEXV8JSfh4eFYtGgR0tLSMHDgQE93p9tgTrTz2d/Yd+/exdy5cxEQEIA5c+Z4ujtEXocZIVLGnDiPz16hGDBgAA4dOuTpbhB5LWaESBlz4jw+e4WCiIiIvAcLCiIiItKMBQURERFpxoKCiIiINGNBQURERJqxoCAiIiLNWFAQERGRZiwoiIiISDMWFERERKQZCwoiIiLSjAUFERERacaCgoiIiDTzyJeDWSwWTzTrE7SOjSvHlsfNvTjeHdMyNsxI98Hx7pgnxsatBYVer0dMTAxiY2Pd2azPiYmJgV6vd2gfd41tV/pGjmFO1HF0LjIj3Qczoo6756KfiIjbWgPQ0NCApqYmdzbpc/R6PYKCghzezx1j29W+OcJisSA8PBxmsxlhYWEubctbMSfKujIXmZHugxlR5o65+Cy3v+URFBTk1hfYk3Bsuw8eS9fguHYfPJbehzdlEhERkWYsKIiIiEgzFhRERESkGQsKIiIi0owFBREREWnGgoKIiIg0Y0FBREREmrGgICIiIs1YUBAREZFmbv+kTH5cqjJ3f1yqqzl6zFu/1MaRL7fp6WPWE/XkY96VjADda8yYEWXuPt5u/S6PhoYGDBkyBCaTyV1N+qSYmBjcvn27WwTfXcecY9bz8Jg7rruMGTOijruPt1uvUDQ1NcFkMqG8vLzHfqGNEovFgtjYWDQ1Nfl86AH3HHOOWc/DY+647jRmzIgyTxxvt7/lAQBhYWGcBD0Mj7njOGY9D4+5Yzhe3oU3ZRIREZFmLCiIiIhIMxYUREREpBkLCiIiItKMBQURERFpxoKCiIiINGNBQURERJqxoCAiIiLNWFAQERGRZt26oCgqKkJiYiKsVqtH2p83bx527NjhkbaJ1PB0RgDmhLyfp3PiMxkRNzKbzQJAzGaz6n0GDx4sgYGBYjAYJCQkRJKSkuTSpUuq9k1ISJCjR4/aLfvjH/8oycnJYjAYJDIyUubMmdPh/hkZGTJixAgJDQ2V/v37i9FolIcPH9rWjxgxQgwGg+3Ru3dvASAHDhwQEZGrV69Kv379pL6+XvXr7coYeTN3vJ6ePmbOzIjSnO/M3LlzBYAUFRW1WddZ7pgT5sRR3nAuadXZvG+llCul9b6SEa++QvHw4UPcuXMHRUVFqK2txf379xEaGoolS5Yo7nvy5ElUV1dj5syZtmXFxcWYM2cO0tLS8ODBA5hMJqxevbrD5wgICMDu3btRVVWFy5cvo7y8HIsXL7atv3btGmpra22PdevWITo6GjNmzAAAxMfHIy4uDnv27On6IBB1wtkZUZrzHdm5cyeePHnS7jql3DEn5GrOzkmrzub9s5RypbTeZzLittJFHK+YTpw4IXq9XhoaGmzL1qxZIz/4wQ8U901LS5PFixfbLZs4caL84he/cKzTzzh69KiEhoZ2uP5v//ZvJSMjw25ZVlaWzJ49W3Ub3elfESLqX8+ePXvsrva0PnQ6nQCQc+fOaW7DVzjyepydkecpzXkRkfLycomNjZWysrJ2/6WmJnfMifLr0ZIRtW34Ck+fS0SU531nlHLV3npfyIhXX6E4d+4cRo8ejcDAQFitVpw5cwY5OTl4/fXXFfe9ePEiRo4cafu5rq4OZ8+eBQCMGzcO0dHRmDhxIk6fPq26P6dPn8aoUaPaXVdYWIgbN24gLS3NbnlCQgJKSkpUt9FTLVq0yO5qT21tLQoKChAcHIz3338f48eP91jfRATHjx/Hm2++ieXLl+Prr7/2WF+e58yMtKezOQ98PzZGoxGZmZkYOHBgm/Vqc8ecKPPmjADAo0eP8NFHHyE1NRVr167FgwcPPNqfZzk7J0rzXolSrtpb7xMZcVvpIo5XTLNmzRK9Xi/h4eGi0+lEr9fL7373O7FarYr7vvTSS7J161bbz+Xl5QJAYmJi5OLFi9LU1CRbtmyR3r17y61btxSf7/e//72EhITIhQsX2l3/2muvycyZM9ss//zzz6VXr16Kz9+qO/0rQqTrr+fTTz+V4OBg+fWvf+2yNtSwWq3yL//yLxIYGCgAxN/fX3r16iW/+c1vnN5WK0dejzMz8jylOS8ismnTJnnllVdsP+O5f6mpzR1z4vjrcSQjXW1DrTt37kifPn0kKChIAEhQUJBERkbKjRs3nN6WiGfPJSLK874zSrnqaL0vZMSrC4q+ffvKrl27RESkqqpKkpOT5c0331S179/93d/Jb3/7W9vPNTU1AkB++ctf2m03YsQIycnJ6fS58vPzJSIiQgoLC9td/9e//lV0Op0cO3aszbo//OEP0q9fP1V9FuEvShGRTz75RAIDAyU7O9tlbaj11VdfSa9evQSA3UOn00lFRYXT2xNx7PU4MyPPUprzIiI3b96UmJgYuXPnjm3Z879Y1eaOOXHs9Tiaka604YhFixbZ3nppffj7+3d607sWnjyXqJn3HVHKVWfrfSEjOrVXMiwWSxevgXTtOcrKylBZWYnExEQAQFRUFDIzM5GSkoINGzYgMjISZ8+excaNG5Gfnw8AWL58OVJSUjB9+nSMHTsW165dsz1feHg44uLi4OfnZ9fO8z8/Ly8vD+np6Th27BiSkpLa3WbLli2IjY213Yz5rKtXr2LcuHGqX3crZ4y3N3D0dezatQtvvfUWcnNzYTQaXdqWGseOHWt3uV6vR0FBAebNm+f0NtW+DmdnpJWaOQ8AX375JaqqqjB27Fi75SkpKUhNTUVubq7q3DEn6l+Hlow42pZaBQUFePr0qd0yq9WKkydPuqQ9T55L1Mz79ijlSmm9pzMSFhamvJHaygPP/QtNy0NNxbR//34xGAzS0tJiW9bc3CwRERGSl5cnIiKNjY0yfPhwERG5cOGCzJ8/37btqVOnJDY21m7/DRs2SP/+/eWbb76Rp0+fyvbt28VgMMjt27fb7UN2drZER0dLSUlJh/1sbm6WF198UdatW9fu+kmTJsm2bdsUX2+r1qqyuz3UHPOcnBzR6/Wyd+9e1ePVk8fMFRlRM+db1dXVSXl5ud0DgOzbt08ePXpk205N7pgTdce8qxnprmPmiXOJ2nn/LKVcqcmdpzOihuorFGazWe2mHbJYLIiNjVW1bUlJCUaNGgV///+7b1Sn02HWrFnYt28fjEYj9Ho9oqOjUVFRgfT0dGzbts227ZQpUxAZGYkTJ05g9uzZAIB3330XtbW1mDZtGmpraxEfH4/jx49j8ODBAIC0tDSUlZWhoKAAALBy5UrodDpMnjzZrm+lpaW2G3EOHz6Mqqqqdv/8qLS0FDdv3kRqaqrqMWpVXl6uriL0cmqP+fr165GVlYVPPvnEdrwc5Yoxe/jwIUaMGIHGxkbbMn9/f/Tr1w/Xrl1DQECAU9sD1I+ZKzKiNOefzUhwcDCCg4Pb9KtPnz6IjIy0/ayUO+ZE3TF3RkYA14zZpk2b8O///u92OQkMDMQvfvELZGRkOLUtwLPnEjXz3tFzidJ6n8mI6nLHCVzxnk56erosWLBAsrKy2qwrLCyUMWPG2FWm7jRv3jzZvn27Q/v0xPeGV69eLQaDQU6dOuWyNrQ4ffq09OnTx3YvRVxcnJSWlrqkLRHnvx5vzogIcyKi/Hq0ZkRNG1q0tLTIv/7rv4pOp7PdmPnTn/5Umpubnd6WCM8lavCmzC44ePCgDB482KFPEPNmPe0X5YULFwT4/ibH9v7GfuHChZrbcIbm5mYpKioSAFJTU+OydkSc/3q6W0ZEelZOnJERpTacpbKyUk6ePOnydnguUebVN2V6q+LiYmRnZyMoKMjTXaEuSExMhIh4uhuKdDqd7aYupRt5vQ0z4tt8JSPA95f9J0yY4OludAlzop1Xf7BVZ+7evYu5c+ciICAAc+bM8XR3iLwOM0KkjDlxHp+9QjFgwAAcOnTI090g8lrMCJEy5sR5fPYKBREREXkPFhRERESkGQsKIiIi0owFBREREWnGgoKIiIg0Y0FBREREmrGgICIiIs1YUBAREZFmLCiIiIhIMxYUREREpBkLCiIiItLMI9/lYbFYPNGsT+iuY+PK18Ux63m669gwJ47pjq/JWTwxNm4tKPR6PWJiYhAbG+vOZn1OTEwM9Hq9p7vhFO465hyznofH3HHdZcyYEXXcfbz9RETc1hqAhoYGNDU1ubNJn6PX6xEUFOTpbjiNO465O8bMYrEgPDwcZrMZYWFhLm2LOVHGnDiuO+WEGVHm7oy4/S2PoKCgbvVLgJTxmDuOY9bz8Jg7huPlfXhTJhEREWnGgoKIiIg0Y0FBREREmrGgICIiIs1YUBAREZFmLCiIiIhIMxYUREREpBkLCiIiItKMBQURERFpxoKCiIiINHP7R2/z89eVdbfvKPBWjs7F1m/vc+Rb/Lp6LJkTZcyJe3hrTpgRZe7OiFu/HKyhoQFDhgyByWRyV5M+KSYmBrdv3+YvSxdy11zsyrFkTtRhTlzPW3PCjKjj7oy49QpFU1MTTCYTysvLXf5tjb7KYrEgNjYWTU1N/EXpQu6Yi109lsyJMubEPbw1J8yIMk9kxO1veQBAWFgYJwF5BW+ei97cN+pZvHUuemu/eirelElERESasaAgIiIizVhQEBERkWYsKIiIiEgzFhRERESkGQsKIiIi0owFBREREWnGgoKIiIg0Y0FBREREmnXrgqKoqAiJiYmwWq0e68O8efOwY8cOj7VPpMTTOWFGyNt5OiOAj+RE3MhsNgsAMZvNqvcZPHiwBAYGisFgkJCQEElKSpJLly6p2jchIUGOHj1q+3nNmjUSFxcnYWFhEh0dLVOnTu30udRsP2LECDEYDLZH7969BYAcOHBARESuXr0q/fr1k/r6elV97soYkePcMc5dbcPTOXnW3LlzBYAUFRW1u15p/ouIVFVVidFolP79+0tISIjMmTNHysvLbesdzYgIc+Iu3poTX8qIiEhLS4t88MEH0rdvXzEYDDJt2jS5c+eO3TYmk0kWLVokffr0kfDwcJk4caJ88cUXtvW+cC7x6isUDx8+xJ07d1BUVITa2lrcv38foaGhWLJkieK+J0+eRHV1NWbOnGlbtnDhQpw/fx5msxn37t3D1KlTMWPGjA6rTjXbX7t2DbW1tbbHunXrEB0djRkzZgAA4uPjERcXhz179mgcDfKE/Px8hISEtHn06tULfn5+KCkp8XQXnZ6TVjt37sSTJ0863V9p/gPAG2+8gcrKSpSWluL+/fsIDg7Gq6++assRM+L7vD0nnswIAKxfvx75+fkoLi6GyWTCwIED7TIAACtWrMC9e/dQWlqKqqoqvPbaa5g1axZqamoA+EZOvLqgKCkpgV6vR2JiIgAgJCQESUlJqKioUNz3wIEDeOWVV+Dv/38vcdiwYYiMjAQAiAgCAgJgMplgNpvbfQ5HtweA3NxcLFmyxO7b3aZOnYqDBw8qv2DyOosWLbI7YdbW1qKgoADBwcF4//33MX78eE930ek5AYC7d+8iMzMTW7dudagvz8//uro6HD9+HFlZWYiIiEBISAjWrFmDy5cv48yZM7b9mBHf5u058XRGNm/ejIyMDPzwhz9ESEgI1q9fj+vXr+NPf/qTbZubN29iwYIFeOGFFxAQEIBly5ahtrYWt27dsm3j7Tnx6oLi3LlzGD16NAIDA2G1WnHmzBnk5OTg9ddfV9z34sWLGDlyZJvlx48fR0REBIKCgrBq1SqsWrXKVjS0x5HtCwsLcePGDaSlpdktT0hI8HiFTs7x2WefYfr06cjIyMDatWs93R0Azs+JiMBoNCIzMxMDBw5U3Y/25r+I2P332f+/dOmSbRkz0r14W048mRGz2YyysjKMGzfOtiwiIgJDhw7F5cuXbcvee+89HDhwACaTCc3Nzdi0aROGDRtm17a358QjX1+uVklJCS5fvoyIiAjU1dXB398fv/3tb/Gzn/1Mcd/q6mqEh4e3Wd56CenRo0f4r//6L8XJ4Mj2OTk5mD59OoYMGWK3PCwsDI8ePVLsM3m3AwcOIDU1FevXr8fPf/5zT3fHxtk5yc3NhYhg6dKlDvWjvfkfEhKCH/3oR8jKysKuXbug0+mwevVq+Pn54fHjx7btmJHuwxtz4smMWCwWAN8XEc+KiIiwrQOASZMmYefOnejfvz8CAgIQHR2NQ4cOITAw0LaNt+fEq69QlJSUIC8vDzU1NaioqMCECRNw6dIl+Pn5Ke4bFRXV6VsTUVFRWLlyJYxGI65du6bq+Trb/t69ezh8+DBWrFjRZp3FYkFUVJRiG+S9du3ahUWLFiEnJ8drfkm2cmZObt26hTVr1mDbtm0O9aGz+b97925ERUXh5ZdfRnx8PJKSkhASEoIXXnjBtg0z0j14a048mZGwsDAAaHM+qqmpsa2zWq2YMmUKBgwYgEePHqGhoQFbtmzBjBkzcOXKFds+3p4T1Vconq2kusqR5ygrK0NlZaXtPa+oqChkZmYiJSUFGzZsQGRkJM6ePYuNGzciPz8fALB8+XKkpKRg+vTpGDt2rGKhYLVa0dzcjG+//Rbx8fGKfeps+y1btiA2NtbuZrRWV69etbvcpYYzxps65sj45ubm4p133sHOnTvxT//0Ty5ty9HtnZ2TL7/8ElVVVRg7dqxdOykpKUhNTUVubm67/ehs/sfExGD37t22n69cuYJ33nkHkydPti3rSkYA5sTVvDUnvpSR8PBwDBo0COfPn7fNcbPZjFu3bmH06NEAvr8K8t133+HQoUO2t9RTUlIQFxeHzz//HAkJCQA8ey5pLX46pfbPQQA47aHmz1j2798vBoNBWlpabMuam5slIiJC8vLyRESksbFRhg8fLiIiFy5ckPnz59u2PXXqlMTGxtrtn52dLffv3xcRkcrKSnn77bclIiJCTCZTu31Qu31zc7O8+OKLsm7dunafZ9KkSbJt2zbF1yzyf3/qw4d7Hkpz8Te/+Y0EBQV1+CdjrjyWnshJXV2dlJeX2z0AyL59++TRo0ft9kFp/v/lL3+RBw8eiNVqlatXr8rYsWNlyZIldts4khER5oQ58a2MrF27VuLi4uT69etSW1sry5Ytk4SEBLs+DR8+XJYuXSpms1laWlrk8OHDotfr7f4c1ZPnEjVUX6Ho7O0DtSwWC2JjY1VtW1JSglGjRtndWavT6TBr1izs27cPRqMRer0e0dHRqKioQHp6ut0lqClTpiAyMhInTpzA7NmzAXx/09iHH36Ix48fIywsDBMmTMDp06fRr18/AEBaWhrKyspQUFCgavtWhw8fRlVVVbt/glRaWoqbN28iNTXVobEqLy9XVxFSl6iZi5mZmdi4cSOOHTuGKVOmdLktR4+lJ3MSHByM4ODgNu306dPH9i+n53PS2fwHgDNnzuBXv/oVqqur0bdvXxiNRqxevdq2vqsZAZgTV/PWnPhaRjIyMmA2m5GcnIy6ujokJyfjyJEjdn06fPgw0tPTMXToUDQ0NGDQoEHYtGmT7UqeT5xLVJUdTuKKD9pIT0+XBQsWSFZWVpt1hYWFMmbMGLsq0N3mzZsn27dvV709P7DHPZTG+cKFCwJAdDqd3Qc3tT4WLlyouQ1n79cZb86JoxkRYU7cxVtz0tMyIuIb5xI/kWf+nsvFLBYLwsPDYTabnVYxHTp0CO+++y7+/Oc/2332g69yxRhRW+4Y5662wZwoY07cw1tzwowo80RGvPqvPNQoLi5GdnZ2t5gARK7CnBB1jhnRzmcLirt372Lu3LkICAjAnDlzPN0dIq/EnBB1jhlxHq/+YKvODBgwAIcOHfJ0N4i8GnNC1DlmxHl89goFEREReQ8WFERERKQZCwoiIiLSjAUFERERacaCgoiIiDRjQUFERESasaAgIiIizVhQEBERkWYsKIiIiEgzFhRERESkGQsKIiIi0swj3+VhsVg80axP4Ni4lyvHW+tzcy50jGPjXt6aE86DjnlibNxaUOj1esTExCA2NtadzfqcmJgY6PV6T3ejW3PXXOzKsWRO1GFOXM9bc8KMqOPujPiJiLitNQANDQ1oampyZ5M+R6/XIygoyNPd6PbcMRe7eiyZE2XMiXt4a06YEWXuzojbCwoiIiLqfnhTJhEREWnGgoKIiIg0Y0FBREREmrGgICIiIs1YUBAREZFmLCiIiIhIMxYUREREpBkLCiIiItKMBQURERFpxoKCiIiINGNBQURERJqxoCAiIiLNWFAQERGRZiwoiIiISLP/B5mxfop6YoC9AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 534x220 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from paddle_quantum.qchem import HardwareEfficient\n",
    "\n",
    "mol.build()\n",
    "cir = HardwareEfficient(mol.num_qubits, depth=2)\n",
    "cir.plot()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Computing potential energy curve for hydrogen molecule\n",
    "Next we will demostrate the usage of VQE method by calculating the potential energy curve of hydrogen molecule. Potential energy surface depicts the variation of molecular energy with respect to the position of inner atoms, it is widely used in physics and chemistry to find the optimal molecular structure or calculate the chemical reaction rate. For hydrogen molecule, the potential energy surface becomes a curve since hydrogen molecule only has one spatial degree of freedom (the distance between two hydrogen atoms)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "converged SCF energy = 2.71588739329275\n",
      "converged SCF energy = -0.593827758535727\n",
      "converged SCF energy = -1.04299627454009\n",
      "converged SCF energy = -1.11675930739643\n",
      "converged SCF energy = -1.09191404102006\n",
      "converged SCF energy = -1.06610864931794\n",
      "converged SCF energy = -0.910873554594387\n",
      "converged SCF energy = -0.783792654277353\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import paddle\n",
    "from paddle.optimizer import Adam\n",
    "from paddle_quantum.qchem import GroundStateSolver\n",
    "from paddle_quantum.qchem import dipole_moment\n",
    "\n",
    "paddle.seed(124)\n",
    "\n",
    "cir_depth = 2\n",
    "bond_lengthes = [0.1, 0.3, 0.5, 0.74, 0.9, 1.0, 1.5, 2.0]\n",
    "energies = []\n",
    "dipole_moments = []\n",
    "for bond_len in bond_lengthes:\n",
    "    mol = Molecule(\n",
    "        geometry = [(\"H\", [0.0, 0.0, 0.0]), (\"H\", [0.0, 0.0, bond_len])],\n",
    "        driver = PySCFDriver()\n",
    "    )\n",
    "    mol.build()\n",
    "    \n",
    "    cir = HardwareEfficient(mol.num_qubits, cir_depth)\n",
    "\n",
    "    solver = GroundStateSolver(Adam, num_iterations=100, tol=1e-5)\n",
    "    e, psi = solver.solve(mol, cir, learning_rate=0.5)\n",
    "    energies.append(e)\n",
    "\n",
    "    # calculate dipole moments\n",
    "    d = dipole_moment(psi, mol)\n",
    "    dipole_moments.append(np.linalg.norm(d))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the first plot, we can see that the ground state energy of hydrogen molecule first decrease with the growth of the extension of two hydrogen atoms and then increase, the lowest ground state energy occurs at bond length equal to 0.74 Angstrom. In the second plot, we can see that hydrogen molecule is unpolarized, its dipole moment is approximately zero no matter how bond length varies."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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fvlFo31Xq1YNW7duxfbt29GwYUMsX74c06dPB/Dyqz+5XI4JEyaozletWrXwww8/AABcXV0xZ84cBAUFwcnJCQEBAQUey9XVFXv37sXp06fh7e2NcePGYdSoUfjss8+0Oh/52bRpE9566y24u7u/9r6Iyjq2uWxz2eaWDRKRs7+bSI917doVzs7O+Pnnn0tk/x9//DESExOxcuXKEtl/TgsWLMCKFSvw4MGDEj9WccjIyEDNmjWxceNGtGnTRtfhEFEpYJurO2xzX+LNXqSXUlNTsWLFCvj4+MDAwACbNm3CoUOHcPDgwRI75vTp0/HDDz9AoVC89ldCuf3www9o3rw5KlWqhBMnTuCrr74q9FN+WXP//n18+umnFb5BJSqv2OaWLWxzX2KPLOml58+fo3fv3jh//jzS0tLg5eWFzz77DO+8846uQyuSjz76CJs3b0ZcXByqVq2K9957D9OmTYOhIT9rEpHusc2lsoqJLBERERHpJd7sRURERER6iYksEREREeklJrJEREREpJeYyBIRERGRXmIiS0RERER6iYksEREREeklJrJEREREpJeYyBIRERGRXmIiS0RERER66f8llUqVQXVHtgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 700x300 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig = plt.figure(figsize=(7, 3), )\n",
    "ax1 = fig.add_subplot(121)\n",
    "ax1.plot(bond_lengthes, energies)\n",
    "ax1.set_xlabel(\"Bond length (Angstrom)\")\n",
    "ax1.set_ylabel(\"Energy (Hartree)\")\n",
    "ax1.set_title(\"Potential energy curve\")\n",
    "\n",
    "ax2 = fig.add_subplot(122)\n",
    "ax2.plot(bond_lengthes, dipole_moments)\n",
    "ax2.set_xlabel(\"Bond length (Angstrom)\")\n",
    "ax2.set_ylabel(\"Dipole moment\")\n",
    "ax2.set_title(\"Dipole moment variation\")\n",
    "ax2.set_ylim(-0.5, 0.5)\n",
    "fig.tight_layout()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## How to use\n",
    "Users can edit the configuration file `config.toml` to customize the task, and the required settings are listed below.\n",
    "\n",
    "```toml\n",
    "# A description of the task of this configuration file, this is optional. \"GroundState\" stands for calculate the ground state energy of the molecule.\n",
    "\n",
    "# This field stores information related to the molecule is provided.\n",
    "[molecule]\n",
    "# Symbols of atoms inside the molecule.\n",
    "symbols = ['H', 'H']\n",
    "# The cartesian coordinates of each atom inside the molecule.\n",
    "coords = [ [ 0.0, 0.0, 0.0 ], [ 0.0, 0.0, 0.7 ] ]\n",
    "\n",
    "# This field specifies configurations related to the quantum circuit in VQE is specified.\n",
    "[ansatz.HardwareEfficient]\n",
    "# The depth of the HardwareEfficient ansatz.\n",
    "depth = 2\n",
    "\n",
    "# This field stores configurations of the variational quantum eigensolver (VQE) method. \n",
    "[VQE]\n",
    "# Number of optimization cycles, default is 100.\n",
    "num_iterations = 100\n",
    "```\n",
    "After setup the configuration file, user can run the following command to perform the quantum chemistry task.\n",
    "```shell\n",
    "python energy_material.py --config example.toml\n",
    "```"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Reference \n",
    "\\[1\\] [Thermaldynamic free energy](https://en.wikipedia.org/wiki/Thermodynamic_free_energy)\n",
    "\n",
    "\\[2\\] Aydinol, M. K., et al. \"Ab initio study of lithium intercalation in metal oxides and metal dichalcogenides.\" Physical Review B 56.3 (1997): 1354.\n",
    "\n",
    "\\[3\\] Kandala, Abhinav, et al. \"Hardware-efficient variational quantum eigensolver for small molecules and quantum magnets.\" Nature 549.7671 (2017): 242-246."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pq-dev",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.15 (default, Nov 10 2022, 13:17:42) \n[Clang 14.0.6 ]"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "5fea01cac43c34394d065c23bb8c1e536fdb97a765a18633fd0c4eb359001810"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
